package com.note.feng.leetcode.algorithms.easy.three;

public class SevenHundredEightyThree {
    /**
     * 783 二叉搜索树节点最小距离
     * 给你一个二叉搜索树的根节点 root ，返回 树中任意两不同节点值之间的最小差值 。
     *
     * 差值是一个正数，其数值等于两值之差的绝对值。
     *
     * 示例 1：
     *
     * 输入：root = [4,2,6,1,3]
     * 输出：1
     * 示例 2：
     *
     * 输入：root = [1,0,48,null,null,12,49]
     * 输出：1
     *  
     * 提示：
     *
     * 树中节点的数目范围是 [2, 100]
     * 0 <= Node.val <= 105
     *
     * 注意：本题与 530：https://leetcode-cn.com/problems/minimum-absolute-difference-in-bst/ 相同
     *
     * 来源：力扣（LeetCode）
     * 链接：https://leetcode.cn/problems/minimum-distance-between-bst-nodes
     */
    /**
     * 解法：中序遍历
     * min 初始值，Integer 的最大值，pre 是指前一个数，默认是 -1 ，因为 val 的值最小是 0
     * @param root
     * @return
     */
    int min = Integer.MAX_VALUE,pre = -1;
    public int minDiffInBST(TreeNode root) {
        dfs(root);
        return min;
    }

    private void dfs(TreeNode node){
        if(node == null){
            return ;
        }
        dfs(node.left);
        if(pre == -1){
            pre = node.val;
        }else{
            min = Math.min(node.val - pre, min);
            pre = node.val;
        }
        dfs(node.right);
    }

    public class TreeNode {
      int val;
      TreeNode left;
      TreeNode right;
      TreeNode() {}
      TreeNode(int val) { this.val = val; }
      TreeNode(int val, TreeNode left, TreeNode right) {
          this.val = val;
          this.left = left;
          this.right = right;
      }
    }
}
